package com.jt.provider.controller;

import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.jt.provider.service.ResourceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.concurrent.atomic.AtomicLong;

@RestController
@RequestMapping("/provider")
public class ProviderSentinelController {

    @GetMapping("/sentinel01")
    public String doSentinel01(){
        return "sentinel 01 test01  ...";
    }


    @GetMapping("/sentinel02")
    public String doSentinel02(){
        return "sentinel 01 test02  ...";
    }



    @Autowired
    private ResourceService resourceService;

    @GetMapping("/sentinel03")
    public String doSentinel03(){
        return resourceService.doGetResource();
    }


    @GetMapping("/sentinel04")
    public String doSentinel04(){
        return resourceService.doGetResource();
    }


    /**
     * 演示降级(熔断)操作,通过如下代码创造降级的条件:
     * 1.服务响应速度慢一些
     * 2.服务不稳定,经常出现异常
     */
    private AtomicLong atomicLong = new AtomicLong(1); //初始值为1的自增数值,
    //http://localhost:8081/provider/sentinel05
    @GetMapping("/sentinel05")
    public String doSentinel05() throws InterruptedException {
        long count = atomicLong.getAndIncrement();
        if(count%2==0){
            Thread.sleep(200);
            //throw new RuntimeException("服务调用失败!")
        }

        return "sentinel test 05";
    }


    //http://localhost:8081/provider/sentinel06?id=10
    //@GetMapping("/sentinel/findById")
    @GetMapping("/sentinel06")
    //@SentinelResource("resource")
    public String doFindById(Integer id){
        //....

         return resourceService.doGetResource(id);
        //return "Get Resource By " + id;
    }







}
